
//给你一个整数数组 nums，
//其中恰好有两个元素只出现一次，其余所有元素均出现两次。 找出只出现一次的那两个元素
int* singleNumber(int* nums, int numsSize, int* returnSize) 
{
    //数组里面的数字全部和ret异或，拿到两个出现一次元素的异或结果
    int ret=0;
    for(int i=0;i<numsSize;i++)
    {
        ret^=nums[i];
    }
    //找到ret的二进制为一的那一位m 不存在没有为1的那一位.
    //因为两个数不同一定有一位不一样
    int m=0;
    while(m<32)
    {
        //(1<<m)为左移m位
        if(ret & (1U<<m))
            break;
        else
            ++m;
    }
    //分离
    int x1=0;
    int x2=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]&(1U<<m))
        {
            x1^=nums[i];
        }
        else
        {
            x2^=nums[i];
        }
    }
    int* retArray=(int*)malloc(sizeof(int)*2);
    retArray[0]=x1;
    retArray[1]=x2;
    *returnSize=2;
    return retArray;

}